#include"stdio.h"
#include"unistd.h"
#include"string.h"
#include"ctype.h"

//字符统计函数
void CharCount(FILE *pt)
{
	int sum = -1;//linux系统中会在文本文件末尾加入$不显示，空文件不会。
	int re_c = 0;//fgetc函数返回一个由字符类型转换而来的int值。
	re_c = fgetc(pt);
	while(1)
	{
		sum++;
		re_c = fgetc(pt);
		if(feof(pt))
		{
			printf("have read at the end 0f file\n");
			break;
		}
		
	}
	//重置位置指针至开头
	rewind(pt);
	printf("文件中字符总数为%d\n",sum);
}
//单词统计函数
void WordCount(FILE *pt)
{
	int sum = 0;
	char flag;

	flag = fgetc(pt);
	while(1)
	{
		//从单词头读到单词末
		if(isalpha(flag))
		{
			while(isalpha(flag))
			{
				flag = fgetc(pt);
			}
			sum++;
		}
		
		if(feof(pt))//如果读到文件末尾或读错（概率很小）
        	{
                	printf("have read at the end of file\n");
                	break;
        	}
		flag = fgetc(pt);
	}
	printf("文件中单词总数为%d\n",sum);
	//重置位置指针至开头
	rewind(pt);
}
//句子数统计函数
void LineCount(FILE *pt)
{

    int sum = 0;
    int re_c =0;

    re_c = fgetc(pt);
    while(1)
    {
        if(re_c == 33 || re_c == 63 || re_c == 46 || re_c == 59)//各种句子结束标点符号对应的十进制值
        {
            sum++;
        }
        re_c=fgetc(pt);
	if(feof(pt))
	{
		printf("have read at the end of file\n");
		break;
	}
    }
    printf("文件中句子总数为%d\n\n\n",sum);
    //重置位置指针至开头
    rewind(pt);
}

int main(int argc,char *argv[])
{
	printf("-------------------------------------------------------------------------------------------------------------------\n");
	printf("该命令提供的参数有 -c -w -l -cw -cl -wl -cwl,-v,-cwlv;\n若没有显示结果，请检查是否参数出错，或源文件格式有误\n\n\n");
	printf("该命令统计单词个数包括注释，句子判定标准我自认为是以'.','!','?'为标记统计\n\n\n");
	//打开文件
	FILE *rd_pt;//源文件指针
	rd_pt = fopen(argv[2],"r");

	if(rd_pt == NULL)
	{
		printf("open %s file failed\n\n\n",argv[2]);
	}
	printf("open %s file success\n\n\n",argv[2]);

	if(strcmp(argv[1],"-c") == 0)
	{
		CharCount(rd_pt);		
	}
	if(strcmp(argv[1],"-l")==0)
	{
		LineCount(rd_pt);
	}
	if(strcmp(argv[1],"-w")==0)
	{
		WordCount(rd_pt);

	}
	if(strcmp(argv[1],"-cl")==0)
        {
		CharCount(rd_pt);
		LineCount(rd_pt);
        }
        if(strcmp(argv[1],"-cw")==0)
	{
		CharCount(rd_pt);
		WordCount(rd_pt);

        }
        if(strcmp(argv[1],"-wl")==0)
        {
		LineCount(rd_pt);
		WordCount(rd_pt);

        }
        if(strcmp(argv[1],"-cwl")==0)
        {       
		CharCount(rd_pt);
		WordCount(rd_pt);
		LineCount(rd_pt);
        }
	
	//关闭文件
	fclose(rd_pt);
	printf("--------------------------------------------------------------------------------------------------\n");
	return 0;
}
